/**
 * Copyright (c) 2016-2019 人人开源 All rights reserved.
 * <p>
 * https://www.renren.io
 * <p>
 * 版权所有，侵权必究！
 */

package com.songlanyun.common.utils;

/**
 * 常量
 *
 * @author Mark sunlightcs@gmail.com
 */
public class Constant {
    public static final String SUPER_PT = "8";
    /**
     * 数据权限过滤
     */
    public static final String SQL_FILTER = "sql_filter";

    /**
     * 超级管理员ID
     */
    public static final Long SUPER_ADMIN = 1L;
    /**
     * 当前页码
     */
    public static final String PAGE = "page";
    /**
     * 每页显示记录数
     */
    public static final String LIMIT = "limit";
    /**
     * 排序字段
     */
    public static final String ORDER_FIELD = "sidx";
    /**
     * 排序方式
     */
    public static final String ORDER = "order";
    /**
     * 升序
     */
    public static final String ASC = "asc";
    /**
     * 删除
     */
    public static final int DEL = 1;
    /**
     * 不删除
     */
    public static final int STET = 0;
    /**
     * 返回值1
     */
    public static final int NUM = 1;
    /**
     * 返回值0
     */
    public static final int ONUM = 0;
    /**
     * 根节点
     */
    public static final String PARRENTID = "0";
    /**
     * 管家name
     */
    public static final String GJNAME = "管家";
    public static final String ONE = "1";
    public static final String COMPLETE = "2";
    public static final String GLY = "5";
    /**
     * 启用
     */
    public static final int ENABLE = 1;
    /**
     * 禁用
     */
    public static final int DISABLE = 0;
    /**
     * 通过
     */
    public static final int PASS = 1;
    /**
     * 不通过
     */
    public static final int NOPASS = 0;
    /**
     * 发布
     */
    public static final int Issue = 0;
    /**
     * 不发布
     */
    public static final int NotIssue = 1;
    /**
     * 默认
     */
    public static final int Default = 1;
    /**
     * 不默认
     */
    public static final int NotDefault = 0;
    /**
     * 未读
     */
    public static final int UNREAD = 0;
    /**
     * 已读
     */
    public static final int READ = 1;
    /**
     * 上架
     */
    public static final int UP = 1;
    /**
     * 上架
     */
    public static final int DOWN = 0;

    /**
     * request uid
     */
    public static final String UID = "uid";

    public static final String ALL = "-1";

    /**
     * 待审核
     */
    public static final int AUDITWAIT = 0;
    /**
     * 审核通过
     */
    public static final int AUDITPASS = 1;
    /**
     * 审核不通过
     */
    public static final int AUDITNOPASS = 2;


    /**
     * sysuser表中用户身份 对应 id *
     * 0：平台超管
     * 1：物业超管
     * 2：平台用户
     * 3：物业用户-员工
     * 4：物业用户-成员
     * 5：是管家身分
     */
    public enum UserType {
        /**
         * 平台超管
         */
        IS_PT_SUPER(0),
        /**
         * 物业超管
         */
        IS_WY_SUPER(1),
        /**
         * 平台用户
         */
        IS_PT_USER(2),
        /**
         * 物业用户-员工（可登陆小程序）  --- 已删除
         **/
        IS_WY_STAFF(3),
        /**
         * 物业用户-成员
         **/
        IS_WY_MEMBER(4),
        /**
         * 是管家身分
         */
        IS_WY_BUTLER(5);

        private Integer value;

        UserType(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }

    }

    /**
     * 部门权限对应id
     * 10
     *
     * @author ww
     */
    public enum DeptPrivType {
        /**
         * 小程序物业入口权限  --能登录
         */
        CAN_MP_LOGIN("10"),
        /**
         * 报事报修处理权限 --能报修  REPAIR
         */
        CAN_REPAIR("20"),
        /**
         * 报事报修派单权限 --能派单
         */
        CAN_SEND("30"),
        /**
         * 数据报表查看权限 --能查看
         */
        CAN_REPORT("40"),
        /**
         * 通讯录查看权限 --能报看
         */
        CAN_BOOK("50"),
        /**
         * 装修权限
         */
        CAN_DECORATE("60"),
        /**
         * 投诉
         */
        CAN_COMPLAINT("70");

        private String value;

        DeptPrivType(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }


    /**
     * 菜单类型
     *
     * @author chenshun
     * @email sunlightcs@gmail.com
     * @date 2016年11月15日 下午1:24:29
     */
    public enum MenuType {
        /**
         * 目录
         */
        CATALOG(0),
        /**
         * 菜单
         */
        MENU(1),
        /**
         * 按钮
         */
        BUTTON(2);

        private int value;

        MenuType(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 定时任务状态
     *
     * @author chenshun
     * @email sunlightcs@gmail.com
     * @date 2016年12月3日 上午12:07:22
     */
    public enum ScheduleStatus {
        /**
         * 正常
         */
        NORMAL(0),
        /**
         * 暂停
         */
        PAUSE(1);

        private int value;

        ScheduleStatus(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 云服务商
     */
    public enum CloudService {
        /**
         * 七牛云
         */
        QINIU(1),
        /**
         * 阿里云
         */
        ALIYUN(2),
        /**
         * 腾讯云
         */
        QCLOUD(3);

        private int value;

        CloudService(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 审核状态
     */
    public enum CheckStatu {
        /**
         * 待审核
         */
        WAIT(10),
        /**
         * 审核成功
         */
        SUCCESS(20),
        /**
         * 审核失败
         */
        FAILED(30);

        private int value;

        CheckStatu(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 交易类型
     */
    public enum OperType {
        /**
         * 充值
         */
        Recharge(10),
        /**
         * 提现
         */
        Withdraw(20),
        /**
         * 账单支付
         */
        Payment(30);

        private int value;

        OperType(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 交易账户类型
     */
    public enum AccountType {
        /**
         * 微信
         */
        WeChat(10),
        /**
         * 支付宝
         */
        Alipay(20),
        //钱包 --余额
        Purse(30);

        private int value;

        AccountType(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 交易账户类型字符串 --- 物业系统是汉字
     */
    public enum AccountTypeStr {
        /**
         * 10 微信
         */
        WeChatStr("微信"),

        //30 钱包 --余额
        Purse("钱包支付");

        private String value;

        AccountTypeStr(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 付款状态
     */
    public enum PayStatu {
        /**
         * 代付款
         */
        WAIT(10),
        /**
         * 已付款
         */
        PAID(20);

        private int value;

        PayStatu(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 账单项目
     */
    public enum BillProject {
        /**
         * 水费
         */
        WaterRate(10),
        /**
         * 电费
         */
        ElectricCharge(20),
        /**
         * 物业费
         */
        PropertyFee(30),
        /**
         * 停车费月卡
         */
        ParkingFeeM(40),
        /**
         * 停车费临时停车
         */
        ParkingFeeT(50);

        private int value;

        BillProject(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }
    }

    /**
     * 住户身份
     * 0---业主
     * 1---家属
     * 2---租户
     * 3---商户
     * 4---普通用户
     */
    public enum RoomUser {
        /**
         * 业主
         */
        Owner(0, "业主"),
        /**
         * 亲友
         */
        KithAndKin(1, "家属"),
        /**
         * 租户
         */
        Tenement(2, "租户"),
        /**
         * 商户
         */
        ComTenant(3, "商户"),
        /**
         * 普通用户
         */
        Domestic(4, "普通用户");

        private Integer value;
        private String self;

        RoomUser(Integer value, String self) {
            this.self = self;
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }

        public String getSelf() {
            return self;
        }

        public static String vBySelf(Integer value) {
            RoomUser[] roomUsers = values();
            for (RoomUser roomUser : roomUsers) {
                if (roomUser.getValue().equals(value)) {
                    return roomUser.getSelf();
                }
            }
            return null;
        }

    }

    /**
     * 公告文章。。。
     */
    public enum BannerType {
        /**
         * 公告
         */
        Affiche(0),
        /**
         * 文章
         */
        Article(1),
        /**
         * 活动
         */
        Activity(2),

        /**
         * 办事
         */
        Work(3),

        /**
         * 首页
         */
        HomePage(4);

        private int value;

        BannerType(int value) {
            this.value = value;
        }

        public int getValue() {
            return value;
        }

    }

    /**
     * 房间类型
     * * 0：住宅
     * * 1：商铺
     * * 2：商品房
     * * 3：写字楼
     * * 4：还建房
     * * 5：广告位
     * * 6:地下室
     * * 7:铁桥拆迁村民
     * * 9: 未设定
     */
    public enum RoomType {
        Residence(0, "住宅"),
        Shop(1, "商铺"),
        Condo(2, "商品房"),
        Office(3, "写字楼"),
        Environment(4, "环境房"),
        Advertising(5, "广告位"),
        Basement(6, "地下室"),
        Villagers(7, "铁桥拆迁村民"),
        Other(8, "其它"),
        NotSet(9, "未设定");


        private Integer key;
        private String value;

        RoomType(Integer key, String value) {
            this.key = key;
            this.value = value;
        }


        /**
         * 根据value获取key
         *
         * @return
         */
        public static Integer getKey(String value) {
            RoomType[] roomTypes = values();
            for (RoomType roomType : roomTypes) {
                if (roomType.value().equals(value)) {
                    return roomType.key();
                }
            }
            return 9;//未设定
        }

        public static String getValue(Integer key) {
            RoomType[] roomTypes = values();
            for (RoomType roomType : roomTypes) {
                if (roomType.key().equals(key)) {
                    return roomType.value();
                }
            }
            return null;
        }

        public Integer key() {
            return this.key;
        }

        public String value() {
            return this.value;
        }

    }

    /**
     * 消息通知类型
     */
    public enum MsgType {
        /**
         * 账单提醒
         */
        Remind(1),
        /**
         * 绑定房屋
         */
        Binding(2),
        /**
         * 投诉
         */
        Complaint(3),
        /**
         * 报事报修
         */
        Report(4),
        /**
         * 装修申请
         */
        Decorate(5),
        /**
         * 活动优惠
         */
        Activity(6),
        /**
         * 支付成功
         */
        PaySucess(7),
        /**
         * 放行条
         */
        Pass(8);


        private Integer value;

        MsgType(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }

    }

    /**
     * 微信模板消息类型
     * 10：缴费账单提醒
     * 20：报事处理通知
     * 30：物业通知
     * 40：投诉建议受理通知
     * 50：订单支付成功通知
     * 60：装修通知
     * 70：绑定房间通知
     * 80：放行条
     * 90：管家提醒
     * 100：待评价提醒
     */
    public enum WXType {
        /**
         * 缴费账单提醒
         */
        Remind(10),
        /**
         * 报事处理通知
         */
        Report(20),
        /**
         * 物业通知
         */
        Activity(30),
        /**
         * 投诉建议受理通知
         */
        Complain(40),
        /**
         * 订单支付成功通知
         */
        Payment(50),
        /**
         * 装修通知
         */
        Decorate(60),
        /**
         * 绑定房间通知
         */
        Binding(70),
        /**
         * 放行条通知
         */
        Pass(80),
        /**
         * 管家提醒通知
         */
        Steward(90),
        /**
         * 待评价通知
         */
        Complaint(100);

        private Integer value;

        WXType(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }

    }

    /**
     * 评价类型
     * 10---投诉
     * 20---放行
     * 30---报修
     * 40---装修
     */
    public enum PropertyType {
        Complaint(10, "投诉"),
        Pass(20, "放行条"),
        Report(30, "报修"),
        Decorate(40, "装修");

        private Integer key;
        private String value;

        PropertyType(Integer key, String value) {
            this.key = key;
            this.value = value;
        }

        /**
         * 根据value获取key
         *
         * @return
         */
        public static Integer getKey(String value) {
            PropertyType[] roomTypes = values();
            for (PropertyType propertyType : roomTypes) {
                if (propertyType.value().equals(value)) {
                    return propertyType.key();
                }
            }
            return null;
        }

        public static String getValue(Integer key) {
            PropertyType[] targeTypes = values();
            for (PropertyType propertyType : targeTypes) {
                if (propertyType.key().equals(key)) {
                    return propertyType.value();
                }
            }
            return null;
        }

        public Integer key() {
            return this.key;
        }

        public String value() {
            return this.value;
        }

    }

}
